1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 module derelict.nanomsg.types; 29 30 31 32 /******************************************************************************/ 33 /* ABI versioning support. */ 34 /******************************************************************************/ 35 36 /* Don't change this unless you know exactly what you're doing and have */ 37 /* read and understand the following documents: */ 38 /* www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html */ 39 /* www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html */ 40 41 /* The current interface version. */ 42 enum NN_VERSION_CURRENT = 2; 43 44 /* The latest revision of the current interface. */ 45 enum NN_VERSION_REVISION = 1; 46 47 /* How many past interface versions are still supported. */ 48 enum NN_VERSION_AGE = 2; 49 50 51 /******************************************************************************/ 52 /* Errors. */ 53 /******************************************************************************/ 54 55 /* A number random enough not to collide with different errno ranges on */ 56 /* different OSes. The assumption is that error_t is at least 32-bit type. */ 57 enum NN_HAUSNUMERO = 156384712; 58 59 /* On some platforms some standard POSIX errnos are not defined. */ 60 enum ENOTSUP = (NN_HAUSNUMERO + 1); 61 enum EPROTONOSUPPORT = (NN_HAUSNUMERO + 2); 62 enum ENOBUFS = (NN_HAUSNUMERO + 3); 63 enum ENETDOWN = (NN_HAUSNUMERO + 4); 64 enum EADDRINUSE = (NN_HAUSNUMERO + 5); 65 enum EADDRNOTAVAIL = (NN_HAUSNUMERO + 6); 66 enum ECONNREFUSED = (NN_HAUSNUMERO + 7); 67 enum EINPROGRESS = (NN_HAUSNUMERO + 8); 68 enum ENOTSOCK = (NN_HAUSNUMERO + 9); 69 enum EAFNOSUPPORT = (NN_HAUSNUMERO + 10); 70 enum EPROTO = (NN_HAUSNUMERO + 11); 71 enum EAGAIN = (NN_HAUSNUMERO + 12); 72 enum EBADF = (NN_HAUSNUMERO + 13); 73 enum EINVAL = (NN_HAUSNUMERO + 14); 74 enum EMFILE = (NN_HAUSNUMERO + 15); 75 enum EFAULT = (NN_HAUSNUMERO + 16); 76 enum EACCES = (NN_HAUSNUMERO + 17); 77 enum EACCESS = (EACCES); 78 enum ENETRESET = (NN_HAUSNUMERO + 18); 79 enum ENETUNREACH = (NN_HAUSNUMERO + 19); 80 enum EHOSTUNREACH = (NN_HAUSNUMERO + 20); 81 enum ENOTCONN = (NN_HAUSNUMERO + 21); 82 enum EMSGSIZE = (NN_HAUSNUMERO + 22); 83 enum ETIMEDOUT = (NN_HAUSNUMERO + 23); 84 enum ECONNABORTED = (NN_HAUSNUMERO + 24); 85 enum ECONNRESET = (NN_HAUSNUMERO + 25); 86 enum ENOPROTOOPT = (NN_HAUSNUMERO + 26); 87 enum EISCONN = (NN_HAUSNUMERO + 27); 88 enum NN_EISCONN_DEFINED = 1; 89 enum ESOCKTNOSUPPORT = (NN_HAUSNUMERO + 28); 90 91 /* Native nanomsg error codes. */ 92 enum ETERM = (NN_HAUSNUMERO + 53); 93 enum EFSM = (NN_HAUSNUMERO + 54); 94 95 96 /* Constants that are returned in `ns` member of nn_symbol_properties */ 97 enum NN_NS_NAMESPACE = 0; 98 enum NN_NS_VERSION = 1; 99 enum NN_NS_DOMAIN = 2; 100 enum NN_NS_TRANSPORT = 3; 101 enum NN_NS_PROTOCOL = 4; 102 enum NN_NS_OPTION_LEVEL = 5; 103 enum NN_NS_SOCKET_OPTION = 6; 104 enum NN_NS_TRANSPORT_OPTION = 7; 105 enum NN_NS_OPTION_TYPE = 8; 106 enum NN_NS_OPTION_UNIT = 9; 107 enum NN_NS_FLAG = 10; 108 enum NN_NS_ERROR = 11; 109 enum NN_NS_LIMIT = 12; 110 111 /* Constants that are returned in `type` member of nn_symbol_properties */ 112 enum NN_TYPE_NONE = 0; 113 enum NN_TYPE_INT = 1; 114 enum NN_TYPE_STR = 2; 115 116 /* Constants that are returned in the `unit` member of nn_symbol_properties */ 117 enum NN_UNIT_NONE = 0; 118 enum NN_UNIT_BYTES = 1; 119 enum NN_UNIT_MILLISECONDS = 2; 120 enum NN_UNIT_PRIORITY = 3; 121 enum NN_UNIT_BOOLEAN = 4; 122 123 /* Structure that is returned from nn_symbol */ 124 struct nn_symbol_properties { 125 126 /* The constant value */ 127 int value; 128 129 /* The constant name */ 130 const char* name; 131 132 /* The constant namespace, or zero for namespaces themselves */ 133 int ns; 134 135 /* The option type for socket option constants */ 136 int type; 137 138 /* The unit for the option value for socket option constants */ 139 int unit; 140 }; 141 142 /******************************************************************************/ 143 /* Zero-copy support. */ 144 /******************************************************************************/ 145 146 enum NN_MSG = cast(size_t)(-1); 147 148 149 /******************************************************************************/ 150 /* Socket definition. */ 151 /******************************************************************************/ 152 153 struct nn_iovec { 154 void* iov_base; 155 size_t iov_len; 156 }; 157 158 struct nn_msghdr { 159 nn_iovec* msg_iov; 160 int msg_iovlen; 161 void* msg_control; 162 size_t msg_controllen; 163 }; 164 165 struct nn_cmsghdr { 166 size_t cmsg_len; 167 int cmsg_level; 168 int cmsg_type; 169 }; 170 171 /* SP address families. */ 172 enum AF_SP = 1; 173 enum AF_SP_RAW = 2; 174 175 /* Max size of an SP address. */ 176 enum NN_SOCKADDR_MAX = 128; 177 178 /* Socket option levels: Negative numbers are reserved for transports, 179 positive for socket types. */ 180 enum NN_SOL_SOCKET = 0; 181 182 /* Generic socket options (NN_SOL_SOCKET level). */ 183 enum NN_LINGER = 1; 184 enum NN_SNDBUF = 2; 185 enum NN_RCVBUF = 3; 186 enum NN_SNDTIMEO = 4; 187 enum NN_RCVTIMEO = 5; 188 enum NN_RECONNECT_IVL = 6; 189 enum NN_RECONNECT_IVL_MAX = 7; 190 enum NN_SNDPRIO = 8; 191 enum NN_RCVPRIO = 9; 192 enum NN_SNDFD = 10; 193 enum NN_RCVFD = 11; 194 enum NN_DOMAIN = 12; 195 enum NN_PROTOCOL = 13; 196 enum NN_IPV4ONLY = 14; 197 enum NN_SOCKET_NAME = 15; 198 199 /* Send/recv options. */ 200 enum NN_DONTWAIT = 1; 201 202 /* Ancillary data. */ 203 enum PROTO_SP = 1; 204 enum SP_HDR = 1; 205 206 /******************************************************************************/ 207 /* Socket mutliplexing support. */ 208 /******************************************************************************/ 209 210 enum NN_POLLIN = 1; 211 enum NN_POLLOUT = 2; 212 213 struct nn_pollfd { 214 int fd; 215 short events; 216 short revents; 217 }; 218 219 220 221 222 223 /*****************/ 224 /* Pair */ 225 /*****************/ 226 enum NN_PROTO_PAIR = 1; 227 enum NN_PAIR = (NN_PROTO_PAIR * 16 + 0); 228 229 /*****************/ 230 /* Pubsub */ 231 /*****************/ 232 enum NN_PROTO_PUBSUB = 2; 233 enum NN_PUB = (NN_PROTO_PUBSUB * 16 + 0); 234 enum NN_SUB = (NN_PROTO_PUBSUB * 16 + 1); 235 enum NN_SUB_SUBSCRIBE = 1; 236 enum NN_SUB_UNSUBSCRIBE = 2; 237 238 /*****************/ 239 /* ReqRep */ 240 /*****************/ 241 enum NN_PROTO_REQREP = 3; 242 enum NN_REQ = (NN_PROTO_REQREP * 16 + 0); 243 enum NN_REP = (NN_PROTO_REQREP * 16 + 1); 244 enum NN_REQ_RESEND_IVL = 1; 245 246 /*****************/ 247 /* Pipeline */ 248 /*****************/ 249 enum NN_PROTO_PIPELINE = 5; 250 enum NN_PUSH = (NN_PROTO_PIPELINE * 16 + 0); 251 enum NN_PULL= (NN_PROTO_PIPELINE * 16 + 1); 252 253 /*****************/ 254 /* Survey */ 255 /*****************/ 256 enum NN_PROTO_SURVEY = 6; 257 enum NN_SURVEYOR = (NN_PROTO_SURVEY * 16 + 0); 258 enum NN_RESPONDENT = (NN_PROTO_SURVEY * 16 + 1); 259 enum NN_SURVEYOR_DEADLINE = 1; 260 261 /*****************/ 262 /* Bus */ 263 /*****************/ 264 enum NN_PROTO_BUS = 7; 265 enum NN_BUS = (NN_PROTO_BUS * 16 + 0); 266 267 268 269 270 271 272 /*****************/ 273 /* Inproc */ 274 /*****************/ 275 enum NN_INPROC = -1; 276 277 /*****************/ 278 /* Ipc */ 279 /*****************/ 280 enum NN_IPC = -2; 281 282 /*****************/ 283 /* Tcp */ 284 /*****************/ 285 enum NN_TCP = -3; 286 enum NN_TCP_NODELAY = 1;